#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Tkinter仪表盘打包脚本
生成独立的exe文件，双击即可运行
"""

import os
import sys
import subprocess
import shutil
from pathlib import Path

def build_tkinter_exe():
    """构建Tkinter版本的exe文件"""
    
    print("🔨 构建Python+Tkinter汽车仪表盘exe文件...")
    print("=" * 50)
    
    # 项目信息
    project_dir = Path(__file__).parent
    main_script = project_dir / "dashboard_tkinter.py"
    
    # 检查主脚本是否存在
    if not main_script.exists():
        print(f"❌ 找不到主脚本: {main_script}")
        return False
    
    # 检查PyInstaller
    try:
        import PyInstaller
        print(f"✅ 找到PyInstaller {PyInstaller.__version__}")
    except ImportError:
        print("📦 安装PyInstaller...")
        try:
            subprocess.run([sys.executable, '-m', 'pip', 'install', 'pyinstaller'], check=True)
            print("✅ PyInstaller安装成功")
        except subprocess.CalledProcessError:
            print("❌ PyInstaller安装失败")
            return False
    
    # 清理之前的构建
    dist_dir = project_dir / "dist"
    build_dir = project_dir / "build"
    
    for dir_to_clean in [dist_dir, build_dir]:
        if dir_to_clean.exists():
            shutil.rmtree(dir_to_clean)
            print(f"🧹 清理: {dir_to_clean}")
    
    # PyInstaller命令
    cmd = [
        sys.executable, '-m', 'PyInstaller',
        '--onefile',                    # 单文件模式
        '--windowed',                   # 无控制台窗口
        '--name', 'CarDashboard',       # exe文件名
        '--clean',                      # 清理缓存
        '--noconfirm',                  # 不确认覆盖
        str(main_script)
    ]
    
    print("🚀 开始构建...")
    print(f"命令: {' '.join(cmd)}")
    
    try:
        # 执行构建
        result = subprocess.run(
            cmd,
            cwd=project_dir,
            capture_output=True,
            text=True,
            encoding='utf-8'
        )
        
        if result.returncode == 0:
            print("✅ 构建成功!")
            
            # 检查生成的文件
            exe_file = dist_dir / "CarDashboard.exe"
            if exe_file.exists():
                size_mb = exe_file.stat().st_size / (1024 * 1024)
                print(f"📦 生成文件: {exe_file}")
                print(f"📏 文件大小: {size_mb:.1f} MB")
                print(f"📁 完整路径: {exe_file.absolute()}")
                
                # 测试运行
                print("\n🧪 测试运行exe文件...")
                try:
                    # 启动exe文件（后台运行）
                    test_process = subprocess.Popen([str(exe_file)])
                    print("✅ exe文件可以正常启动")
                    
                    # 等待几秒后终止测试进程
                    import time
                    time.sleep(3)
                    test_process.terminate()
                    print("✅ 测试完成")
                    
                except Exception as e:
                    print(f"⚠️  测试运行时出现问题: {e}")
                
                return True
            else:
                print("❌ 未找到生成的exe文件")
                return False
        else:
            print("❌ 构建失败:")
            print("STDOUT:", result.stdout)
            print("STDERR:", result.stderr)
            return False
            
    except Exception as e:
        print(f"❌ 构建过程出错: {e}")
        return False

def main():
    """主函数"""
    print("🚗 Python+Tkinter 汽车仪表盘打包工具")
    print("=" * 50)
    
    # 检查Python版本
    python_version = sys.version_info
    if python_version < (3, 6):
        print("❌ 需要Python 3.6+")
        input("按Enter键退出...")
        return 1
    
    print(f"✅ Python {python_version.major}.{python_version.minor}.{python_version.micro}")
    
    # 开始构建
    success = build_tkinter_exe()
    
    if success:
        print("\n🎉 构建完成!")
        print("\n📋 使用说明:")
        print("   1. 在dist目录中找到CarDashboard.exe")
        print("   2. 双击exe文件即可运行")
        print("   3. 无需安装Python环境")
        print("   4. 可以复制到其他Windows电脑运行")
        
        print("\n🎮 操作说明:")
        print("   • 加速/减速按钮: 控制车速")
        print("   • 随机速度: 设置随机目标速度")
        print("   • 停车: 减速到0")
        print("   • 实时显示: 速度、转速、档位、燃油、水温")
        
    else:
        print("\n❌ 构建失败")
        print("请检查错误信息并重试")
    
    input("\n按Enter键退出...")
    return 0 if success else 1

if __name__ == "__main__":
    sys.exit(main())